package Servlets;

import Beans.Horario;
import Beans.HorarioDoUsuario;
import Beans.Usuario;
import Daos.HorarioDoUsuarioDao;
import Daos.UsuarioDao;
import codigoGeral.Calendario;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ServletNovoJogo extends HttpServlet {

    private void mataSessoesNovoJogo(HttpServletRequest request) {

        //inicializa com sessoes ja removidas
        HttpSession session = request.getSession(false);
        session.removeAttribute("horario");
        session.removeAttribute("data");
        session.removeAttribute("listaUsuariosLivres");
        session.removeAttribute("mostrar");
        session.removeAttribute("erroNaoTemUsuarios");



    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //primeira coisa:remover sessoes
        mataSessoesNovoJogo(request);

        String data = request.getParameter("date");
        String horarioChegada = request.getParameter("horario");


        Usuario usuario = null;

        System.out.println("data: " + data);

        //se data  ou horario de chegada em branco, nao vai adiante
        if ((data == null ? "" == null : data.equals("")) || horarioChegada == null) {
            request.setAttribute("erroData", "Data invalida!");
            request.setAttribute("mostrar", false);//manda comando para ocultar botao de seleçao de usuarios
            RequestDispatcher rd = request.getRequestDispatcher("novoJogo.jsp");
            rd.forward(request, response);
        }

        //se data for menor que a data de hoje, nao vai adiante
        Calendario dataMinina = new Calendario(null);
        if (!dataMinina.comparaDataComAtual(data)) {
            request.setAttribute("erroData", "Data invalida!");
            request.setAttribute("mostrar", false);//manda comando para ocultar botao de seleçao de usuarios
            RequestDispatcher rd = request.getRequestDispatcher("novoJogo.jsp");
            rd.forward(request, response);

        }

        System.out.println("Chegou aqui!");


        horarioChegada = horarioChegada + ":00";

        HttpSession sessao = request.getSession();
        usuario = (Usuario) sessao.getAttribute("usuario");




        System.out.println(data);
        System.out.println(horarioChegada);

        //no layout, inserir a opçao de horario como opçoes já predefinidas

        //  horario = "2:00";
        String horario2 = horarioChegada.replace(":00", "").trim();

        int horarioEntradaInteiro = Integer.parseInt(horario2);
        int horarioSaidaInt = horarioEntradaInteiro;

        horarioSaidaInt++;//incrementa valor da variavel,para dar o valor de horario de saida
        String horarioSaidaConvertido = horarioSaidaInt + ":00";

        System.out.println("===================");
        System.out.println("horario: " + horarioChegada);
   //     System.out.println("Horario2: " + horario2 + "will");

        System.out.println("chegadaInt: " + horarioSaidaInt);
        System.out.println("saidaConvetido: " + horarioSaidaConvertido);

        System.out.println("Nome do usuario: " + usuario.getNome());

        Calendario calendario = new Calendario(data);


        //seleciona usuarios no banco conforme dia e horario escolhidos

        //transforma o dia que foi pego em uma string respectica com os 3 primeiros caracteres
        String diaSemanaDisponivel = calendario.retornaDiaSemanaCom3PrimeirosCaracteres();

        //essa string é a mais importante
        String horarioParaConsultaBanco = horarioEntradaInteiro + diaSemanaDisponivel;
        System.out.println("horario consulta no banco: " + horarioParaConsultaBanco);

        //retorna lista com todos os horarioDoUsuario com a string
        List<HorarioDoUsuario> horarioDoUsuario = new HorarioDoUsuarioDao().getPorString("horarioLivre=" + horarioParaConsultaBanco);

        //lista que tera todo os usuarios livres naquele horario
        List<Usuario> usuarios = new ArrayList<Usuario>();

        //lista para pegar id dos usuarios livres naquele horario
        for (HorarioDoUsuario horarioDoUsuario1 : horarioDoUsuario) {

            Long idUsuario = horarioDoUsuario1.getUsuario().getId();
            System.out.println("idUsuario = " + idUsuario);

            //pega o nome dos sujeitos com base no id
            Usuario usuario2 = new UsuarioDao().get(idUsuario);
            if (usuario2 != null) {
                usuarios.add(usuario2);
            }
        }

        //imprime usuarios capturados
        for (Usuario usuario1 : usuarios) {
            System.out.println("nome dos usuarios capturados: " + usuario1.getNome());

        }


        //grava um novo jogo no horario especificado
        Horario horario = new Horario(horarioChegada, horarioSaidaConvertido);

        //manda lista de usuarios livres para requisiçao

        //cria sessao para enviar dados adiante
        HttpSession sessão = request.getSession(true);

        //soh manda requisicao se houverem usuarios disponiveis
        if(usuarios.size()>0){
            request.setAttribute("mostrar", true);//manda comando para mostrar/ocultar botao de seleçao de usuarios
        }
        else{
            sessão.setAttribute("erroNaoTemUsuarios", "Nao existem usuarios com esse horario.");

        }

        //    request.setAttribute("horario", horario);//manda horario para requisiçao

        ///    request.setAttribute("jogo", jogo);//manda jogo para requisiçao

        

        sessão.setAttribute("horario", horario);//manda horario para sessao
        sessão.setAttribute("data", data);//manda data para sessao
        sessão.setAttribute("listaUsuariosLivres", usuarios);//manda lista de usuarios livres para requisiçao

        RequestDispatcher rd = request.getRequestDispatcher("novoJogo.jsp");
        rd.forward(request, response);
    }
}
